android 删除Sdcard卡(TF卡)文件 您所在的位置:网站首页 Android Sdcard文件操作之读、写、增、删Kotlin实现 android 删除Sdcard卡(TF卡)文件

android 删除Sdcard卡(TF卡)文件

2024-06-14 01:20| 来源: 网络整理| 查看: 265

在Android5.0往后的平台上,你想通过单纯的调用File.delete()或着ContentResolver.delete()来删除Sdcard上的文件会删除失败。前者提示没有权限,后者仅仅删除数据库文件对应的信息,但物理文件还存在,手机重启后MediaScanner会重新将其信息扫描进数据库。

那既然如此,有没有什么办法可以删除Sdcard上的文件呢?root?

将apk放在system下?

这些都太小题大做了,下面介绍一个在非root情况下使用平台正规api删除sdcard文件的方法。

Documents

在Android平台中,提供了一个名为DocumenstProvider的内容提供者,当然要使用它就必需继承它。它的作用就是帮助开发者构件一棵Documents树,树的根节点及文件目录的根结点。底下的文件或文件夹就是这棵树的枝叶。说了这么多,我们来介绍一下今天的主角:ExternalStorageProvider,他是继承自DocumenstProvider的一个平台类,通过它我们就能间接的删除Sdcard上的文件了。

获取读写权限 final Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); startActivityForResult(intent, 42);

首先通过上面的代码打开系统的DocumentsUI界面,并选择Sdcard的更目录,并点击确认

image.png image.png

接着在onActivityResult中获取sdcard在ExternalStorageProvider中对应的uri

@Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SDCARD_PERMISSION_REQUEST && resultCode == RESULT_OK) { Uri url = data.getData(); if (url != null) { Log.e("tag",url.toString()); getContentResolver().takePersistableUriPermission(url, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); // DeviceStorageUtil.setSDCardPermissionUri(url); } } }

其中0C3D-8650%3A为sdcard的唯一标示符,也可看作ID,我们这里记作SDCARD_UUID,并且把上面的Uri data记作SDCARD_URI

接下来获取读写权限:

getContentResolver().takePersistableUriPermission(data,Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

到这里我们已经拿到删除Sdcard文件的权限了,接下来就是怎么去删了。

删除文件 //SDCARD_URI上面获得的 //SDCARD_UUID也是上面获得的 //filePath为文件在Sdcard下的相对路径 Uri uri = DocumentsContract.buildDocumentUriUsingTree(SDCARD_URI, SDCARD_UUID + ":" + filePath); DocumentsContract.deleteDocument(mContentResolver, uri);


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有